package com.spring_shiro.controller;

import com.spring_shiro.model.PicMsg;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("/pic")
public class UploadController {
    private SimpleDateFormat sfd=new SimpleDateFormat("yyyyMMddHHmmss");
    @SneakyThrows
    @PostMapping("/upload")
    public String upload(PicMsg picMsg){
        System.out.println(picMsg);
//        System.out.println(picName);
//        System.out.println(qwer);
//        System.out.println(filePic);
//        boolean empty = filePic.isEmpty();
        MultipartFile filePic = picMsg.getFilePic();
        String originalFilename = filePic.getOriginalFilename();
        String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
        String picName1=picMsg.getPicName()+sfd.format(new Date())+ext;

        InputStream inputStream = filePic.getInputStream();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
//创建一个Buffer字符串
        byte[] buffer = new byte[1024];
//每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
//使用一个输入流从buffer里把数据读取出来
        while( (len=inputStream.read(buffer)) != -1 ){
//用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            out.write(buffer, 0, len);
        }
//关闭输入流
        inputStream.close();
//把outStream里的数据写入内存

//得到图片的二进制数据，以二进制封装得到数据，具有通用性
        byte[] data = out.toByteArray();
//new一个文件对象用来保存图片，默认保存当前工程根目录
        File imageFile = new File("E:\\攻城狮文件\\testb\\"+picName1);
//创建输出流
        FileOutputStream fileOutStream = new FileOutputStream(imageFile);
//写入数据
        fileOutStream .write(data);
        out.close();
        fileOutStream.close();

        return "操作完成";
    }


/*//前端放在formData中也可以，拼接到路径上也可以，后端加不加注解都行。
    public String upload(@RequestParam("picName") String picName,
                         @RequestParam("qwer") String qwer,
                         @RequestParam("filePic") MultipartFile filePic){

    }
     public String upload(String picName,String qwer,MultipartFile filePic){

    }

    */


/*//    用对象接收时候不要加注解@RequestBody（加了会报错）,前端放到formData中
    public String upload(PicMsg picMsg){

    }*/
/*前端传的表单形式后端用post接收，通知用@RequestParam注解接收，参数名和表单的key一样就行
* */


}
